home *** CD-ROM | disk | FTP | other *** search
/ Aminet 44 / Aminet 44 (2001)(GTI - Schatztruhe)[!][Aug 2001].iso / Aminet / dev / gui / gtlayout.lha / Source / LTP_CreateObjectNode.c < prev    next >
C/C++ Source or Header  |  1999-01-03  |  6KB  |  377 lines

  1. /*
  2. **    GadTools layout toolkit
  3. **
  4. **    Copyright © 1993-1999 by Olaf `Olsen' Barthel
  5. **        Freely distributable.
  6. **
  7. **    :ts=4
  8. */
  9.  
  10. #ifndef _GTLAYOUT_GLOBAL_H
  11. #include "gtlayout_global.h"
  12. #endif
  13.  
  14. /*****************************************************************************/
  15.  
  16. #include <stddef.h>
  17.  
  18. /*****************************************************************************/
  19.  
  20. #include "Assert.h"
  21.  
  22. /*****************************************************************************/
  23.  
  24. ObjectNode *
  25. LTP_CreateObjectNode(LayoutHandle *handle,LONG type,ULONG id,STRPTR label)
  26. {
  27.     ObjectNode *node;
  28.     ULONG size,extra;
  29.  
  30.     if(type < BUTTON_KIND || (type > TEXT_KIND && type < INCREMENTER_KIND) || type > TEXTEDIT_KIND)
  31.         return(NULL);
  32.  
  33.     switch(type)
  34.     {
  35.         #ifdef DO_GAUGE_KIND
  36.         {
  37.             case GAUGE_KIND:
  38.  
  39.                 extra = sizeof(GaugeExtra);
  40.                 break;
  41.         }
  42.         #endif
  43.  
  44.         #ifdef DO_TAPEDECK_KIND
  45.         {
  46.             case TAPEDECK_KIND:
  47.  
  48.                 extra = sizeof(TapeDeckExtra);
  49.                 break;
  50.         }
  51.         #endif    /* DO_TAPEDECK_KIND */
  52.  
  53.         #ifdef DO_LEVEL_KIND
  54.         {
  55.             case LEVEL_KIND:
  56.  
  57.                 extra = sizeof(LevelExtra);
  58.                 break;
  59.         }
  60.         #endif    /* DO_LEVEL_KIND */
  61.  
  62.         case BUTTON_KIND:
  63.  
  64.             extra = sizeof(ButtonExtra);
  65.             break;
  66.  
  67.         case XBAR_KIND:
  68.         case YBAR_KIND:
  69.  
  70.             extra = sizeof(BarExtra);
  71.             break;
  72.  
  73.         case BOX_KIND:
  74.  
  75.             extra = sizeof(BoxExtra);
  76.             break;
  77.  
  78.         case FRAME_KIND:
  79.  
  80.             extra = sizeof(FrameExtra);
  81.             break;
  82.  
  83.         case IMAGE_KIND:
  84.  
  85.             extra = sizeof(ImageExtra);
  86.             break;
  87.  
  88.         case PICKER_KIND:
  89.  
  90.             extra = sizeof(PickerExtra);
  91.             break;
  92.  
  93.         case INCREMENTER_KIND:
  94.  
  95.             extra = sizeof(IncrementerExtra);
  96.             break;
  97.  
  98.         case LISTVIEW_KIND:
  99.  
  100.             extra = sizeof(ListExtra);
  101.             break;
  102.  
  103.         case MX_KIND:
  104.  
  105.             extra = sizeof(RadioExtra);
  106.             break;
  107.  
  108.         case TEXT_KIND:
  109.  
  110.             extra = sizeof(TextExtra);
  111.             break;
  112.  
  113.         case NUMBER_KIND:
  114.  
  115.             extra = sizeof(NumberExtra);
  116.             break;
  117.  
  118.         case CYCLE_KIND:
  119.  
  120.             extra = sizeof(CycleExtra);
  121.             break;
  122.  
  123.         #ifdef DO_POPUP_KIND
  124.         {
  125.             case POPUP_KIND:
  126.  
  127.                 extra = sizeof(PopupExtra);
  128.                 break;
  129.         }
  130.         #endif
  131.  
  132.         #ifdef DO_TAB_KIND
  133.         {
  134.             case TAB_KIND:
  135.  
  136.                 extra = sizeof(TabExtra);
  137.                 break;
  138.         }
  139.         #endif
  140.  
  141.         case PALETTE_KIND:
  142.  
  143.             extra = sizeof(PalExtra);
  144.             break;
  145.  
  146.         case SLIDER_KIND:
  147.  
  148.             extra = sizeof(SliderExtra);
  149.             break;
  150.  
  151.         case SCROLLER_KIND:
  152.  
  153.             extra = sizeof(ScrollerExtra);
  154.             break;
  155.  
  156.         case INTEGER_KIND:
  157.  
  158.             extra = sizeof(IntegerExtra);
  159.             break;
  160.  
  161.         case PASSWORD_KIND:
  162.         case STRING_KIND:
  163.         case FRACTION_KIND:
  164.  
  165.             extra = sizeof(StringExtra);
  166.             break;
  167.  
  168.         #ifdef DO_TEXTEDIT_KIND
  169.         {
  170.             case TEXTEDIT_KIND:
  171.  
  172.                 extra = sizeof(TextEditExtra);
  173.                 break;
  174.         }
  175.         #endif /* DO_TEXTEDIT_KIND */
  176.  
  177.         case HORIZONTAL_KIND:
  178.         case VERTICAL_KIND:
  179.  
  180.             extra = sizeof(GroupExtra);
  181.             break;
  182.  
  183.         #ifdef DO_BOOPSI_KIND
  184.         {
  185.             case BOOPSI_KIND:
  186.  
  187.                 extra = sizeof(BOOPSIExtra);
  188.                 break;
  189.         }
  190.         #endif    /* DO_BOOPSI_KIND */
  191.  
  192.         default:
  193.  
  194.             extra = 0;
  195.             break;
  196.     }
  197.  
  198.     size = offsetof(ObjectNode,Special) + extra;
  199.  
  200.     if(node = LTP_Alloc(handle,size))
  201.     {
  202.         node->Type            = type;
  203.         node->Label            = label;
  204.         node->ID            = id;
  205.         node->PointBack        = node;
  206.         node->LayoutSpace    = 1;
  207.  
  208.         switch(type)
  209.         {
  210.             case LISTVIEW_KIND:
  211.  
  212.                 node->LabelPlace                = PLACE_ABOVE;
  213.                 node->Lines                        = 1;
  214.                 node->Current                     = ~0;
  215.                 node->Special.List.LinkID        = -1;
  216.                 node->Special.List.AutoPageID    = -1;
  217.  
  218.                 break;
  219.  
  220.             case PASSWORD_KIND:
  221.             case STRING_KIND:
  222.             case FRACTION_KIND:
  223.  
  224.                 node->Special.String.LayoutHandle     = handle;
  225.                 node->Special.String.LinkID            = -1;
  226.                 node->Special.String.MaxChars        = 256;
  227.  
  228.                 break;
  229.  
  230.             case INTEGER_KIND:
  231.  
  232.                 node->Special.Integer.LayoutHandle    = handle;
  233.                 node->Min                            = -2147483647;
  234.                 node->Max                            = 2147483647;
  235.                 node->Special.Integer.MaxChars        = 11;
  236.  
  237.                 break;
  238.  
  239.             #ifdef DO_BOOPSI_KIND
  240.             {
  241.                 case BOOPSI_KIND:
  242.  
  243.                     node->Special.BOOPSI.Link = NIL_LINK;
  244.                     break;
  245.             }
  246.             #endif    /* DO_BOOPSI_KIND */
  247.  
  248.             #ifdef DO_TAPEDECK_KIND
  249.             {
  250.                 case TAPEDECK_KIND:
  251.  
  252.                     node->LabelPlace = PLACE_BELOW;
  253.                     break;
  254.             }
  255.             #endif    /* DO_TAPEDECK_KIND */
  256.  
  257.             case MX_KIND:
  258.  
  259.                 node->LabelPlace                    = PLACE_RIGHT;
  260.                 node->Special.Radio.TitlePlace        = PLACETEXT_LEFT;
  261.                 node->Special.Radio.AutoPageID        = -1;
  262.  
  263.                 break;
  264.  
  265.             #ifdef DO_POPUP_KIND
  266.             {
  267.                 case POPUP_KIND:
  268.  
  269.                     node->Special.Popup.AutoPageID = -1;
  270.                     break;
  271.             }
  272.             #endif
  273.  
  274.             #ifdef DO_TAB_KIND
  275.             {
  276.                 case TAB_KIND:
  277.  
  278.                     node->Special.Tab.AutoPageID = -1;
  279.                     break;
  280.             }
  281.             #endif
  282.  
  283.             #ifdef DO_TEXTEDIT_KIND
  284.             {
  285.                 case TEXTEDIT_KIND:
  286.  
  287.                     node->LabelPlace    = PLACE_LEFT;
  288.                     node->Lines            = 1;
  289.  
  290.                     break;
  291.             }
  292.             #endif
  293.  
  294.             case CYCLE_KIND:
  295.  
  296.                 node->Special.Cycle.AutoPageID = -1;
  297.                 break;
  298.  
  299.             case SCROLLER_KIND:
  300.  
  301.                 node->Special.Scroller.Visible        = 2;
  302.                 node->Special.Scroller.RelVerify    = TRUE;
  303.                 node->Special.Scroller.Immediate    = TRUE;
  304.                 break;
  305.  
  306.             case SLIDER_KIND:
  307.  
  308.                 node->Special.Slider.LevelPlace        = PLACETEXT_LEFT;
  309.                 node->Special.Slider.LevelFormat    = LTP_NumberFormat;    /* either %ld or %lD, according to locale */
  310.  
  311.                 break;
  312.  
  313.             case FRAME_KIND:
  314.  
  315.                 node->Special.Frame.DrawBox            = TRUE;
  316.                 node->Special.Frame.Dummy.GadgetID    = id;
  317.                 break;
  318.  
  319.             case BOX_KIND:
  320.  
  321.                 node->Special.Box.DrawBox    = TRUE;
  322.                 node->Special.Box.TextPen    = -1;
  323.                 node->Special.Box.BackPen    = -1;
  324.                 break;
  325.  
  326.             case TEXT_KIND:
  327.  
  328.                 node->Special.Text.FrontPen = node->Special.Text.BackPen = -1;
  329.                 break;
  330.  
  331.             case NUMBER_KIND:
  332.  
  333.                 node->Special.Number.FrontPen = node->Special.Number.BackPen = -1;
  334.                 node->Special.Number.MaxNumberLen = 10;
  335.                 break;
  336.  
  337.             case HORIZONTAL_KIND:
  338.  
  339.                 node->Special.Group.Horizontal = TRUE;
  340.  
  341.                 /* Fall through to... */
  342.  
  343.             case VERTICAL_KIND:
  344.  
  345.                 node->Type            = GROUP_KIND;
  346.                 node->LabelPlace    = PLACE_IN;
  347.  
  348.                 break;
  349.  
  350.             #ifdef DO_LEVEL_KIND
  351.             {
  352.                 case LEVEL_KIND:
  353.  
  354.                     node->Special.Level.LevelPlace    = PLACETEXT_LEFT;
  355.                     node->LabelPlace                = PLACE_LEFT;
  356.                     node->Special.Level.LevelFormat    = LTP_NumberFormat;    /* either %ld or %lD, according to locale */
  357.                     node->Special.Level.Freedom        = FREEHORIZ;
  358.                     node->Lines                        = 2;
  359.  
  360.                     break;
  361.             }
  362.             #endif    /* DO_LEVEL_KIND */
  363.  
  364.             #ifdef DO_GAUGE_KIND
  365.             {
  366.                 case GAUGE_KIND:
  367.  
  368.                     node->Special.Gauge.LastPercentage = -1;
  369.                     break;
  370.             }
  371.             #endif    /* DO_GAUGE_KIND */
  372.         }
  373.     }
  374.  
  375.     return(node);
  376. }
  377.